﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sisco.AplicacionEscritorio.Maestro
{
    public partial class TipoEquipo : Form
    {
        public TipoEquipo()
        {
            InitializeComponent();
        }

        private void TipoEquipo_Load(object sender, EventArgs e)
        {
            ListarTipoEquipo();
        }

        private void ListarTipoEquipo()
        {
            LogicaNegocio.TipoEquipoBLL tipoEquipoBLL = new LogicaNegocio.TipoEquipoBLL();

            gridInfoRegistrada.DataSource = tipoEquipoBLL.Listar();
            gridInfoRegistrada.ClearSelection();
            gridInfoRegistrada.CurrentCell = null;
        }

        private void LimpiarFormulario()
        {
            txtTipoEquipo.ResetText();
            chkAsignarPrograma.Checked = false;
            chkNombreEquipo.Checked = false;
        }

        private void gridInfoRegistrada_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridInfoRegistrada.DataSource != null)
            {
                gridInfoRegistrada.Columns["ID"].Visible = false;
                gridInfoRegistrada.Columns["NOMBRETIPO"].HeaderText = "Tipo de equipo";
                gridInfoRegistrada.Columns["TIENENOMBRETIPO"].HeaderText = "Nombre de Equipo";
                gridInfoRegistrada.Columns["PERMITEPROGRAMA"].HeaderText = "Permite programas";
                gridInfoRegistrada.Columns["ELIMINADO"].Visible = false;
                gridInfoRegistrada.Columns["EQUIPO"].Visible = false;
            }
        }

        private void gridInfoRegistrada_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (gridInfoRegistrada.Columns[e.ColumnIndex].Name == "TIENENOMBRETIPO")
            {
                int valor = (int)e.Value;

                e.Value = valor == 1 ? "Si" : valor == 0 ? "No" : string.Empty;
            }

            if (gridInfoRegistrada.Columns[e.ColumnIndex].Name == "PERMITEPROGRAMA")
            {
                int valor = (int)e.Value;

                e.Value = valor == 1 ? "Si" : valor == 0 ? "No" : string.Empty;
            }
        }

        private void gridInfoRegistrada_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                AccesoDatos.TIPOEQUIPO equipoTipo = gridInfoRegistrada.Rows[e.RowIndex].DataBoundItem as AccesoDatos.TIPOEQUIPO;

                txtTipoEquipo.Text = equipoTipo.NOMBRETIPO.Trim();
                chkAsignarPrograma.Checked = equipoTipo.PERMITEPROGRAMA.HasValue ? equipoTipo.PERMITEPROGRAMA.Value == 1 ? true : equipoTipo.PERMITEPROGRAMA.Value == 0 ? false : false : false;
                chkNombreEquipo.Checked = equipoTipo.TIENENOMBRETIPO.HasValue ? equipoTipo.TIENENOMBRETIPO.Value == 1 ? true : equipoTipo.TIENENOMBRETIPO.Value == 0 ? false : false : false;
            }
        }

        private void btnRegistrar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtTipoEquipo.Text))
            {
                LogicaNegocio.TipoEquipoBLL tipoEquipoBLL = new LogicaNegocio.TipoEquipoBLL();
                List<AccesoDatos.TIPOEQUIPO> lista = tipoEquipoBLL.Listar();
                AccesoDatos.TIPOEQUIPO tipo = lista.Find(x => x.NOMBRETIPO.Equals(txtTipoEquipo.Text.Trim(), StringComparison.CurrentCultureIgnoreCase));

                if (tipo == null)
                {
                    AccesoDatos.TIPOEQUIPO nuevoTipoEquipo = new AccesoDatos.TIPOEQUIPO()
                    {
                        NOMBRETIPO = txtTipoEquipo.Text.Trim(),
                        TIENENOMBRETIPO = chkNombreEquipo.Checked ? 1 : 0,
                        PERMITEPROGRAMA = chkAsignarPrograma.Checked ? 1 : 0,
                        ELIMINADO = 0
                    };

                    tipoEquipoBLL.Registrar(nuevoTipoEquipo);

                    ListarTipoEquipo();
                    LimpiarFormulario();
                }
                else
                {
                    MessageBox.Show("El valor ingresado ya se encuentra en la lista", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Ingrese campo 'Tipo de equipo'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (gridInfoRegistrada.SelectedRows.Count > 0)
            {
                if (!string.IsNullOrWhiteSpace(txtTipoEquipo.Text))
                {
                    AccesoDatos.TIPOEQUIPO selectedTipoEquipo = gridInfoRegistrada.SelectedRows[0].DataBoundItem as AccesoDatos.TIPOEQUIPO;
                    LogicaNegocio.TipoEquipoBLL tipoEquipoBLL = new LogicaNegocio.TipoEquipoBLL();

                    if (selectedTipoEquipo.NOMBRETIPO.Equals(txtTipoEquipo.Text.Trim(), StringComparison.CurrentCultureIgnoreCase))
                    {
                        AccesoDatos.TIPOEQUIPO updEquipo = new AccesoDatos.TIPOEQUIPO()
                         {
                             NOMBRETIPO = txtTipoEquipo.Text.Trim(),
                             TIENENOMBRETIPO = chkNombreEquipo.Checked ? 1 : 0,
                             PERMITEPROGRAMA = chkAsignarPrograma.Checked ? 1 : 0,
                         };

                        tipoEquipoBLL.Actualizar(selectedTipoEquipo, updEquipo);
                        ListarTipoEquipo();
                        LimpiarFormulario();
                    }
                    else
                    {
                        List<AccesoDatos.TIPOEQUIPO> lista = tipoEquipoBLL.Listar();
                        AccesoDatos.TIPOEQUIPO tipo = lista.Find(x => x.NOMBRETIPO.Equals(txtTipoEquipo.Text.Trim(), StringComparison.CurrentCultureIgnoreCase) && x.ELIMINADO == 0);

                        if (tipo == null)
                        {
                            AccesoDatos.TIPOEQUIPO updEquipo = new AccesoDatos.TIPOEQUIPO()
                             {
                                 NOMBRETIPO = txtTipoEquipo.Text.Trim(),
                                 TIENENOMBRETIPO = chkNombreEquipo.Checked ? 1 : 0,
                                 PERMITEPROGRAMA = chkAsignarPrograma.Checked ? 1 : 0,
                             };

                            tipoEquipoBLL.Actualizar(selectedTipoEquipo, updEquipo);
                            ListarTipoEquipo();
                            LimpiarFormulario();
                        }
                        else
                        {
                            MessageBox.Show("El valor ingresado ya se encuentra en la lista", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }                    
                }
                else
                {
                    MessageBox.Show("Ingrese campo 'Tipo de equipo'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (gridInfoRegistrada.SelectedRows.Count > 0)
            {
                DialogResult dr = MessageBox.Show("¿Confirma eliminar la fila seleccionada?", "Sisco", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                if (dr == DialogResult.Yes)
                {
                    AccesoDatos.TIPOEQUIPO selectedEquipo = gridInfoRegistrada.SelectedRows[0].DataBoundItem as AccesoDatos.TIPOEQUIPO;
                    LogicaNegocio.TipoEquipoBLL tipoEquipoBLL = new LogicaNegocio.TipoEquipoBLL();

                    tipoEquipoBLL.Eliminar(selectedEquipo);
                    ListarTipoEquipo();
                    LimpiarFormulario();
                }
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
